/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package Controladores;

import static Auxiliares.MensajesCodigosError.BASE_DATOS_NO_ENCONTRADA;
import static Auxiliares.MensajesCodigosError.ENTRADA_DUPLICADA;
import static Auxiliares.MensajesCodigosError.TABLA_NO_ENCONTRADA;
import java.awt.Color;
import java.sql.SQLException;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

/**
 *
 * @author Administrador
 */
public class GestorMensajes {

////////////////////////////////////////////////////////////////////////////////
// Constructores
////////////////////////////////////////////////////////////////////////////////
    
    public GestorMensajes(){
        
    }

////////////////////////////////////////////////////////////////////////////////
// Interfaz de la clase
////////////////////////////////////////////////////////////////////////////////
    
    /**
     * imprime un mensaje en pantalla
     * @param _mensajes 
     */
    public void mensaje(String _mensajes){
        imprimirMensaje(_mensajes);
    }
    
    /**
     * imprime en pantalla el mensaje de error recivido
     * @param _mensajeError 
     */
    public void mensajeError(String _mensajeError){
        imprimirError(_mensajeError);
    }
    
    /**
     * imprime en pantalla los errores encontrados de tipo MySQL
     * @param log Excepcion de tipo MySQL
     * @param _dato dato adicional que puede ser el nombre o identificador de donde
     * se genero el error que sera añadido al mensaje de error.
     * Ejemplo: _tipoError: tipo de error tabla no encontrada
     *          _dato: alumnos (nombre de la tabla)
     *         salida: "No se encontro la tabla de alumnos"
     */
    public void mensajeError(SQLException log, String _dato){
        String mensajeError;
        final int tipoError = log.getErrorCode();
        
        switch(tipoError){
            case BASE_DATOS_NO_ENCONTRADA:
                mensajeError = "No se encontro la base de datos " + _dato;
                imprimirError(mensajeError);
                guardarLog(log, _dato);
                break;
                
            case TABLA_NO_ENCONTRADA:
                mensajeError = "No se encontro la tabla de " + _dato;
                imprimirError(mensajeError);
                guardarLog(log, _dato);
                break;
                
            case ENTRADA_DUPLICADA:
                switch(_dato){
                    case "Actualizacion Alumno":
                        mensajeError = "Error al intentar actualizar al alumno";
                        imprimirError(mensajeError);
                        break;
                    case "Registro Alumno":
                        mensajeError = "El alumno ya a sido registrado anteriormente";
                        imprimirError(mensajeError);
                        break;
                    default:
                        mensajeError = "El equipo con numero de inventario " + _dato + ""
                                + "ya esta registrado a nombre de otra persona";
                        imprimirError(mensajeError);
                }
                guardarLog(log, _dato);
                break;
                
            default:
                guardarLog(log, _dato);
        }
    }
    
    /**
     * imprime los errores detectados al momento de verificar los campos de alguno
     * de los formularios
     * @param _mensajeError mensaje del error encontrado
     * @param _areaTexto JTextField donde se encontro el error
     */
    public void mensajeError(String _mensajeError, JTextField _areaTexto){
        _areaTexto.setBackground(Color.red);
        if(_areaTexto.getToolTipText() == null){
            _areaTexto.setToolTipText(_mensajeError);
        }else{
            String erroresEncontrados = _areaTexto.getToolTipText();
            erroresEncontrados = erroresEncontrados.concat(", " +_mensajeError);
            _areaTexto.setToolTipText(erroresEncontrados);
        }
    }
    
    /**
     * imprime los errores detectados al momento de verificar el campo descripcion
     * @param _mensajeError informacion sobre el error encontrado
     * @param _areaTexto JTextArea donde se encontro el error
     */
    public void mensajeError(String _mensajeError, JTextArea _areaTexto){
        _areaTexto.setBackground(Color.red);
        if(_areaTexto.getToolTipText() == null){
            _areaTexto.setToolTipText(_mensajeError);
        }else{
            String erroresEncontrados = _areaTexto.getToolTipText();
            erroresEncontrados = erroresEncontrados.concat(", " + _mensajeError);
            _areaTexto.setToolTipText(erroresEncontrados);
        }
    }
    
    /**
     * Imprimi los errores encontrados al momento de verificar la seleccion en un
     * JComboBox
     * @param _mensajeError informacion sobre el error encontrado
     * @param _areaSeleccion JComboBox donde se encontro el error
     */
    public void mensajeError(String _mensajeError, JComboBox _areaSeleccion){
        _areaSeleccion.setBackground(Color.red);
        if(_areaSeleccion.getToolTipText() == null){
            _areaSeleccion.setToolTipText(_mensajeError);
        }else{
            String erroresEncontrados = _areaSeleccion.getToolTipText();
            erroresEncontrados = erroresEncontrados.concat(", " + _mensajeError);
            _areaSeleccion.setToolTipText(erroresEncontrados);
        }
    }
    
////////////////////////////////////////////////////////////////////////////////
// Metodos privados
////////////////////////////////////////////////////////////////////////////////

    /**
     * guarda los detalles del error en el log
     * @param log
     * @param _dato 
     */
    private void guardarLog(SQLException log, String _dato){
        System.out.println(log.getMessage() +  "  ; codigo error: " + log.getErrorCode() +  "  ; " + _dato );
    }
    
    /**
     * imprime los mensajes informativos en la pantalla
     * @param _mensaje 
     */
    private void imprimirMensaje(String _mensaje){
        JOptionPane.showMessageDialog(null, _mensaje, "Informacion", JOptionPane.INFORMATION_MESSAGE);
    }
    
    /**
     * imprime los mensajes de error en pantalla
     * @param _mensajeError 
     */
    private void imprimirError(String _mensajeError){
        JOptionPane.showMessageDialog(null, _mensajeError, "Error", JOptionPane.ERROR_MESSAGE);
    }
    
////////////////////////////////////////////////////////////////////////////////
// Declaracion de variables
////////////////////////////////////////////////////////////////////////////////
}
